/*
题目描述：替换空格
实现一个函数，把字符串中的每个空格替换成"%20"
方法：
1. 从前向后扫描，遇到一个空格，就将后面的字符向后移动两格，然后在空格处填充"%20"
2. 从后向前扫描，定一两个指针P1和P2，P1指向原数组的最后一个位置，P2指向新数组的最后一个位置，P1和P2向前移动，一个一个复制
    P1遇到空格，P1向前移动一格，三个空格填充"%20",P2向前移动三格，当P1与P2相遇的时候，空格填充完毕
 */
public class E5 {
    public static void main(String[] args){
        String string = "We are happy.";
        char[] str = new char[20];
        for(int i = 0; i < 13; i++){
            str[i] = string.charAt(i);
        }

        ReplaceBlank(str, 20);
        System.out.println(str);
    }
    //方法2：
    private static void ReplaceBlank(char[] str, int length){
        if(str == null || length <= 0){
            return;
        }
        //calculate the length
        int originalLength = 0;
        int numberOfBlank = 0;
        int index = 0;
        while(str[index] != '\0'){
            originalLength++;
            if(str[index] == ' '){
                numberOfBlank ++;
            }
            index++;
        }

        int newLength = originalLength + 2 * numberOfBlank;

        if(newLength > length){
            return;
        }
        int indexOfOriginal = originalLength;
        int indexOfNew = newLength;
        while(indexOfOriginal >= 0 && indexOfNew > indexOfOriginal){
            if(str[indexOfOriginal] == ' '){
                str[indexOfNew--] = '0';
                str[indexOfNew--] = '2';
                str[indexOfNew--] = '%';
            }
            else{
                str[indexOfNew--] = str[indexOfOriginal];
            }
            indexOfOriginal --;
        }
    }
}
/*
We%20are%20happy.
 */